# -*-  coding:utf-8  -*-
'''
异常的关键字
try:发现异常
except:解决异常
else:没有异常时执行
finally:有没有异常都执行
'''
'''
面向对象 ：  
封装（属性私有化开放对外公共方法）   
继承（子类继承父类 继承所有非私有属性）   
多态（事物的多种形态）  条件  1 . 继承关系    2.子类重写父类的方法 3.父类引用  指向子类对象（python中无法实现的 没有数据类型的声明）
声明 class  
实例化   ：把类  演变成对象    因为对象可以通过对象名   得到类中的方法  
类变量：直接声明在类中   本类中随便调用    分为开放和不开发（私有 __）
类变量   数据成员   实例变量   他们三个都是一个意思 
局部变量  ：   声明在方法中 
self  在类中   代表本类
'''
#在封装的过程中   一般不给定义值   给 None
class person:
    #通用属性
    __name = None
    __sg = None
    #通过构造方法进行赋值
    def  __init__(self,name = None,sg = None):
        self.__name = name
        self.__sg = sg
    #第一种指声明  get方法进行取值
    def  get_name(self):
        return  self.__name
    def  get_sg(self):
        return  self.__sg
    #set进行赋值
    def  set_name(self, name):
        self.__name = name
    def  set_sg(self,sg):
        self.__sg = sg
    def  chi(self):
        print('正在吃饭')

class  ZhangSan(person):
    __sex = None
    #子类可以重写父类的方法  增强父类的方法    默认使用子类的方法
    # def get_name(self,name):
    #     self.set_name(name)
    def __init__(self,name =None,sg = None,sex = None):
        person.__init__(name=name,sg=sg,self=self)#子类有构造方法的时候  必须先调用父类的构造方法
        self.__sex = sex

    def  get_sex(self):
        return  self.__sex
    #重写父类的方法   重写的目的就是为了增强‘
    def  chi(self):
        print(str(self.get_name()) + '正在吃饭')



zs = ZhangSan(name='王二胖',sg='165',sex='女')
# zs.set_sg('175')
# zs.set_name('王五')
print(zs.get_name())
print(zs.get_sg())
print(zs.get_sex())
zs.chi()#  子类重写父类的方法   默认调用的就是子类中的方法

# per = person('李四','185')#实例化  类都是有小括号
# # per.set_name('张三')
# # per.set_sg('175')
# print(per.get_name())
# print(per.get_sg())

# class  demo06:
#     aa = 10
#     __cc = 50#私有的  只有本类才能使用
#     def  fun1(self):
#         print('你好')
#
#
# de = demo06()#实例化    把类  演变成对象
# de.fun1()
# c = de.aa#通过对象名  来进行调用
#
# print(c)
